Although applicable to any system that is used to develop software components, the present embodiments will be described in combination with software development environments.
In modern electronic applications (e.g., industrial applications like production line controllers), complex software programs are used to control the electronic applications.
In some applications, the application controller is not programmed with a static control algorithm, but with a complex dynamic control program. Such complex dynamic control programs may include an optimization problem that is continuously solved in real time by the application controller using a solver integration that connects the application controller to a solver library for solving such optimization problems.
The development of such control software is a very time consuming task.
An optimization problem may be modelled with the underlying optimization application in mind. A software engineer then uses the model of the optimization problem as a basis for implementation of the solver integration.
The software developer manually codes the solver integration, which is used to integrate the optimization problem into the control program and couple the control program with a predefined solver library. When manually coding the solver integration, the software developer codes the solver integration in a predefined programming language (e.g., C++, C#, Java or the like) and for a specific solver library (e.g., CPLEX, Gurobi, SCIP/Soplex, GLPK or the like).
In complex applications, the solver integration may easily include thousands of lines of code. In such complex applications, the manual coding is a time consuming, and error prone process and the quality of the resulting code depends on the quality of the respective software engineer.
The solver integration may realize the optimization problem in its entirety, and the realization of the optimization problem should be verifiable. With a conventional development process that includes manual coding of thousands of lines of solver integration code, this is not possible.
In modern development processes, the model of the optimization problem is to be adapted to evolving application needs. Therefore, the solver integration also is to be adapted to the changing model with every model iteration. If this adaptation is not concluded with high accurateness, the model and the solver integration will drift apart from each other.
Because every solver library provides a proprietary solver interface, the software developer is to specifically program the solver integration for one solver library that is used in the respective project.
If for any reason, in such an application, one solver library is exchanged for another solver library, the solver integration is to be rewritten from scratch.